package com.demo3_求最长子串.text1;

import java.util.ArrayList;

/*
给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
          思路:
          1,用集合将读到的字符存储进集合,
          2,每存之前先进行验证是否包含该元素,不包含则添加
          3,需要用到2个集合,第一个集合存储遍历中长度最长的, 第2个存临时的

          第一次提交失败:  忽略了  "dvdf"  这种情况.

 */
public class Text3 {
    public static void main(String[] args) {

        String s="aaaaaa";
        String s1="abcccccccc";
        String s2="abcd";
        System.out.println(new Solution().lengthOfLongestSubstring(s));
        System.out.println(new Solution().lengthOfLongestSubstring(s1));
        System.out.println(new Solution().lengthOfLongestSubstring(s2));
    }
}
class Solution {
    public int lengthOfLongestSubstring(String s) {
        ArrayList<Character> longList=new ArrayList<>();
        ArrayList<Character> tempList=new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            //1.如果不报含则直接添加
            if(!tempList.contains(s.charAt(i))){
                tempList.add(s.charAt(i));
            }else{
                //如果temp集合长度>= long集合
                if(tempList.size()>=longList.size()){
                    //1.清空long集合
                    longList.clear();
                    //2.将temp赋值给long集合
                    for (int j = 0; j < tempList.size(); j++) {
                        longList.add(tempList.get(j));
                    }
                    //3.清空temp集合,并添加当下的元素
                    tempList.clear();
                    tempList.add(s.charAt(i));
                }else {
                    //如果temp集合长度小于long集合,只要清空
                    tempList.clear();
                    tempList.add(s.charAt(i));
                }
            }
        }
        return longList.size()>tempList.size()? longList.size():tempList.size();
    }
}